package cn.czxy.share.service;

import cn.czxy.share.dao.ShareDao;
import cn.czxy.share.domain.ShareFile;
import cn.czxy.share.util.ShareUtil;

import java.io.File;
import java.util.Date;
import java.util.Iterator;
import java.util.List;

/**
 * @author shenghan
 * @version 1.0
 * @date 2019/4/13 0013
 */
public class ShareService {
    /**
     * ShareDao的对象
     */
    private ShareDao sd = new ShareDao();

    /**
     * 展示用户分享过的文件集合方法
     * @param userName 欲展示的集合所属对象的userName名
     * @return 共享文件集合,ShareFile对象集合
     */
    public List<ShareFile> list(String userName) {
        File file = new File(ShareDao.xmlDir+userName+".xml");
        if (file.exists()) {
            return sd.readList(file);
        }else{
//            return new ArrayList<ShareFile>();
            return null;
        }
    }

    /**
     * 添加文件到共享空间
     * @param fileName 欲添加的文件名
     * @param userName 共享文件所属用户的userName
     * @return 该文件转化的共享文件对象ShareFile
     */
    public ShareFile addShareFile(String fileName, String userName) {
        if (list(userName)==null) {
            sd.creatXML(userName);
        }
        int index = fileName.lastIndexOf("\\")==-1?fileName.lastIndexOf("/"): fileName.lastIndexOf("\\");
        ShareFile sf = new ShareFile(userName, System.currentTimeMillis(),-1L,fileName.substring(index+1), fileName);
        sd.add(sf);
        return sf;
    }

    /**
     * 获取共享文件夹集合,每个文件夹对应一个已分享过文件的用户
     * @return 文件夹名(用户名)集合
     */
    public List<String> getSharedUlist() {
        return sd.getSharedUlist();
    }

    /**
     * 添加文件为私密共享文件
     * @param sf 欲添加的文件的ShareFile对象
     * @return 该私密共享文件的口令
     */
    public String addPersonalShareFile(ShareFile sf) {
        sf.setAddress(ShareUtil.genRandomNum());
        sd.addPersonal(sf);
        return sf.getAddress();
    }

    /**
     * 通过口令展示对应的共享文件
     * @param address 文件口令
     * @return 口令对应的ShareFile对象
     */
    public ShareFile findPersonalShareFile(String address) {
        ShareFile sf = sd.findPersonalFile(address);
        if (sf == null) {
            return null;
        }
        Date nowDate = new Date();
        if (nowDate.getTime() - sf.getShareDate() < sf.getLiveTime()) {
            return sf;
        }else{
            return sf;
        }
    }

    public boolean deleteShareFile(String filePath,String userLoginName) {
        File file = new File(ShareDao.xmlDir + userLoginName + ".xml");
        List<ShareFile> shareFiles = sd.readList(file);
        Iterator<ShareFile> it = shareFiles.iterator();
        while (it.hasNext()) {
            if (it.next().getFilePath().equals(filePath)) {
                it.remove();
            }
        }
        sd.writeToXML(userLoginName,shareFiles);
        return true;
    }
}
